$(function() {

    /** 前ページ名にマッチする正規表現パターン */
    var REG_PRE_PAGE       = /page=([a-zA-Z0-9._\-]+)/;

    console.log("設定画面の初期化処理を開始します");

    // localStrageから保存済み設定値を取得
    var dispCount = localStorage["shovel.dispCount"]||DEF_DISP_COUNT;
    var interval =  localStorage["shovel.interval"]||DEF_UPD_INTERVAL;
    var isNotify = localStorage["shovel.isNotify"]||"";
    var notifyWait = localStorage["shovel.notifyWait"]||DEF_NOTIFY_WAIT;
    var userName =  localStorage["shovel.user"]||"";
    var password =  localStorage["shovel.password"]||"";

    console.log("localStrageから取得した値 = " + JSON.stringify({
         "dispCount" : dispCount
        ,"interval"  : interval
        ,"isNotify"  : (!(!isNotify))
        ,"notifyWait": notifyWait
        ,"userName"  : userName
        ,"password"  : password
    }));

    // フォームに設定
    $("#dispCount").val(dispCount);
    $("#lDispCount").html(dispCount);
    $("#interval").val(Math.floor(interval/1000));
    $("#isNotify").attr("checked", (!(!isNotify)));
    $("#notifyWait").val(Math.floor(notifyWait/1000));

    // ログイン情報は保存されている場合のみ設定
    if (userName && userName != "undefined") {
        $("#userName").val(userName);
        $("#password").val(password);
    }

    // 画面遷移でオプションページに来た場合
    if (location.href.indexOf("?mode=link") > 0) {
        // 前画面ページ名を取得
        var pre_page = (REG_PRE_PAGE.exec(location.href)||[])[1]||"popup";
        // リンクラベルとURLを設定
        $("#quit").html("戻&nbsp;&nbsp;る").attr("href", "../pages/" + pre_page + ".html");
    }
    
    // Chrome拡張機能のオプションページから来た場合
    else {
        // リンクラベルとURLを設定
        $("#quit").html("閉じる").attr("href", "JavaScript:self.close()");
    }

    console.log("quitリンクのhref属性値=" + $("#quit").attr("href"));

    // ユーザ名とパスワードにキーイベントをバインド
    $("#userName,#password").bind("keyup", function() {
        // 値が空の場合に背景色を変える
        $(this).css("background-color", $(this).val() ? "#FFFFFF" : "#FFFFD0");
    });

    // バインドしたキーイベントを一度だけ実行
    $("#userName,#password").keyup();

    // タイムライン表示件数スライダーにChangeイベントをバインド
    $("#dispCount").bind("change", function() {
        // タイムライン表示件数ラベルを連動させる
        $('#lDispCount').html($(this).val());
    });

    // チェックボックスの見た目をかわいくする
    $("input:checkbox").checkbox({cls:'jquery-safari-checkbox'});

    // 保存リンクのhrefはダミー
    $("#save").attr("href", "JavaScript:void(0)").bind("click",
        // 保存リンクのクリック処理を設定
        function () {
        
            /***********************************************************
             * 入力値検証処理
             ***********************************************************/
            var validateOptions = function () {
                var errors = [];
                if (!$("#userName").val()) {
                    errors.push("ユーザ名が入力されていません。");
                }
                if (!$("#password").val()) {
                    errors.push("パスワードが入力されていません。");
                }
                if (errors.length > 0) {
                    alert(errors.join("\n"));
                    return false;
                }
                return true;
            }

            // 入力チェック
            if (!validateOptions()) return false;

            // localStorageに設定値を保存
            localStorage["shovel.user"] = $("#userName").val();
            localStorage["shovel.password"] = $("#password").val();
            localStorage["shovel.dispCount"] = $("#dispCount").val();
            localStorage["shovel.interval"] = $("#interval").val() * 1000;
            localStorage["shovel.isNotify"] = $("#isNotify").attr("checked")||"";
            localStorage["shovel.notifyWait"] = $("#notifyWait").val() * 1000;

            console.log("localStrageに保存した値 = " + JSON.stringify({
                 "dispCount" : localStorage["shovel.dispCount"]
                ,"interval"  : localStorage["shovel.interval"]
                ,"isNotify"  : localStorage["shovel.isNotify"]
                ,"notifyWait": localStorage["shovel.notifyWait"]
                ,"userName"  : localStorage["shovel.user"]
                ,"password"  : localStorage["shovel.password"]
            }));

            // デスクトップ通知の認証を行う
            if ($("#isNotify").attr("checked")) {
                if (webkitNotifications.checkPermission() !== 0) {
                    console.log("デスクトップ通知の認証を行います");
                    webkitNotifications.requestPermission();
                }
            }

            // 保存完了メッセージを表示し、quitリンクの動作を実行する
            Message.print("保存しました。", "blue", 2000, function() {
                self.location.href = $("#quit").attr("href");
            });
        }
    );
});
